package com.wu.threadPool;

import java.io.IOException;

/**
 * 单线程
 */
public class SimpleThread extends Thread {
    /**
     * 运行的状态
     */
    private boolean runningFlag;
    /**
     * 要执行的操作
     */
    private Task task;
    /**
     * 线程在Vector中的索引
     */
    private final int threadIndex;
    /**
     * 通知接口
     */
    private final Notify myNotify;

    /**
     * 返回线程的工作状态
     *
     * @return true 线程已被占用
     */
    public boolean isRunning() {
        return this.runningFlag;
    }

    /**
     * 1、设置当前线程为 true, 表示当前线程已被占用，通知其他线程即可
     * 2、设置当前线程为false，表示当前线程处于空闲状态
     *
     * @param flag true or false
     */
    public synchronized void setRunning(boolean flag) {
        this.runningFlag = flag;
        if (flag) {
            this.notifyAll();
        }
    }

    public SimpleThread(int threadIndex, Notify notify) {
        runningFlag = false;
        this.threadIndex = threadIndex;
        this.myNotify = notify;
        //System.out.println("Thread  " + threadIndex + "  started ...");
    }

    @Override
    public synchronized void run() {
        while (true) {
            //初始化的时候为 false，处于就绪状态，等待调用
            if (!runningFlag) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } else {
                //System.out.println("线程 " + threadIndex + " 开始执行任务...");
                Object returnValue = null;
                try {
                    returnValue = this.task.doTask();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (myNotify != null) {
                    myNotify.notifyResult(returnValue);
                }
                //System.out.println("线程  " + threadIndex + "  重新准备...");
                setRunning(false);
            }
        }
    }

    public Task getTask() {
        return task;
    }

    public void setTask(Task task) {
        this.task = task;
    }
}